It is sometimes desirable to analyze performance of a data processing device as the device executes a set of instructions. Accordingly, a device monitoring tool can be used to monitor a data processing device to determine how device resources are employed as instructions are executed. For example, the device monitoring tool may identify the most frequently executed modules and instructions in the device, or may identify how modules allocate memory or perform I/O requests.
One such device monitoring tool is a trace tool. The trace tool monitors the instruction pipeline and, in response to designated events, generates trace messages, such that each trace message includes information about the state of a portion of the pipeline. For example, the trace message can include information such as a process identifier, a thread identifier, a program counter, and the like. Further, the information in a trace may vary depending on a particular profiling or analysis that is to be performed. Each trace message can be stored in a buffer of the data processing device for access by an external debugger. However, as the complexity of data processing devices has increased, the amount of information in each trace message has increased. As the size of each trace message increases, the amount of trace buffer space required to store the messages can become undesirably large.